|
From the News Page 4 | |
CD %TEMP%
Add 1
Sub 1. Count down
Switching.bat
Nested.bat
ErLevHEX.bat Returns Errorlevel as HEX.
B-Levels.bat Set Errorlevel / Get Bennylevel.
HEXtoDEC.bat A small hx2dec converter (new version).
Multi.Batch ASCII table. Useful when working in DOS with colors.
CD %TEMP%.
The TEMP environment can simply be set to a drive letter followed by a colon
or a drive specification followed by a colon with one or more directories.
Won't work: CD %temp%\
Work (sometimes): FOR %%v in (: d) do c%%v %temp%\
This solution was hard to find (I used an hour) and it is tested in both old
DOS 6.22 and in Win 98:
IF not (%temp%)==() FOR %%v in (%temp%.\ CD) do %%v %temp%.
Add 1
Purpose: Repeat something without using third-party file(s).
@echo off
SET I000=
SET I00=
SET I0=
SET I=
SET X=%I%
SET j=
:Loop
IF (%X%)==() SET X=0
ECHO SHIFT> %temp%.\1.bat
ECHO SET X=%%%X%>>%temp%.\1.bat
CALL %temp%.\1.bat 1 2 3 4 5 6 7 8 9 0
SET I%j%=%X%
IF NOT %X%==0 FOR %%! in (GOTO:Next SET) do %%! j=
SET j=%j%0
IF %j%== 0 FOR %%! in (GOTO:Loop SET) do %%! X=%I0%
IF %j%==00 FOR %%! in (GOTO:Loop SET) do %%! X=%I00%
FOR %%! in (GOTO:Loop SET) do %%! X=%I000%
:Next
ECHO %I000%%I00%%I0%%I%
IF NOT 9==%I000%%I00%%I0%%I% FOR %%! in (GOTO:Loop SET) do %%! X=%I%
FOR %%! in (X I I0 I00 I000) do SET %%!=
DEL %temp%.\1.bat
EXIT. Notes:
Loops per second:
1__________________________________________| 86,0
2___________________________________________________| 104,0
3_____________________________________________________| 108,0
4_________________________________________________________| 116,5
(a long line meeans fast syntax).
1. "SHIFT" and "FOR %%X in (0 %X%) do SET X=%%X".
2. No Shift and "FOR %%X in (0 %X%) do SET X=%%X".
3. No Shift and "IF (%X%)==() SET X=0" (instead of the above FOR loop).
4. No Shift and without the line (FOR or IF) setting X=0 if X is blank.
2, 3 and 4 requires "CD %TEMP%." and "ECHO SET X=%%%X%> " instead of
"ECHO SET X=%%%X%>>" and
"CALL 1 2 3 4 5 6 7 8 9 0 [filename must be 1.bat]", instead of
"CALL %temp%.\1.bat 1 2 3 4 5 6 7 8 9 0".
4 requires "I000, I00, I0 and I" are set to zero (or another value),
and that you prefix the exit value with zeros "IF NOT 0009" (instead
of "IF NOT 9").
Running on a RAM drive without antivirus can also speed up the loop.
Sub 1. Count down (543 to 525)
The following is also (as the above), a result of my baching this week, i.e.
both the change TEMP tricks and my previours experience from page 3 is used:
@echo off
SET I000=
SET I00=5
SET I0=4
SET I=3
ECHO %I000%%I00%%I0%%I%
IF not (%temp%)==() FOR %%v in (%temp%.\ CD) do %%v %temp%.
SET X=%I%
SET j=
:Loop
ECHO SET X=%%%X%>9.bat
CALL 9 0 1 2 3 4 5 6 7 8
SET I%j%=%X%
IF NOT %X%==9 FOR %%! in (GOTO:Next SET) do %%! j=
SET j=%j%0
IF %j%== 0 FOR %%! in (GOTO:Loop SET) do %%! X=%I0%
IF %j%==00 FOR %%! in (GOTO:Loop SET) do %%! X=%I00%
FOR %%! in (GOTO:Loop SET) do %%! X=%I000%
:Next
ECHO %I000%%I00%%I0%%I%
IF NOT 525==%I000%%I00%%I0%%I% FOR %%! in (GOTO:Loop SET) do %%! X=%I%
FOR %%! in (X I I0 I00 I000) do SET %%!=
DEL 9.bat
EXIT. -- Btw. here's another method:
IF %X%==8 SET X=7
IF %X%==9 SET X=8
IF %X%==0 SET X=9, and so...
OR
echo EXIT|%comspec%/kPROMPT SET V9=8$_SET V8=7$_SET V7=6$_SET V6=5$_SET V
5=4$_SET V4=3$_SET V3=2$_SET V2=1$_SET V1=0$_SET V0=9$_:>9.bat
CALL 9.bat
:Loop from here
%comspec%/cECHO SET X=%%V%X%%%>9.bat
CALL 9.bat
Maybe continued including speed test and STRINGS.COM, etc...
Switching.bat
@echo off
CHOICE/n/c'01 ÿ Set X to 0 or 1? % [margin]%
FOR %%e in (0 1) do if errorlevel }%%e SET X=%%e
ECHO. (X) = (%X%)
FOR %%%X% in (1 0) do IF NOT %%%X%==%X% SET X=%%%X%
:: Or FOR %%X in (0 1) do IF NOT %%X==%X% SET X=%%X
ECHO. (X) = (%X%)
FOR %%%X% in (1 0) do IF NOT %%%X%==%X% ECHO. X was %%%X% but is now %X%
Notes:
The character of ASCII value 255 (FFh) is used to get a margin (a prefix of
space) and two percent with a space between, % %, is used at the end of the
CHOICE syntax.
Nested.bat
@ECHO OFF
ECHO. Input a two digit number N: (between 00 and 20),
CHOICE/n/c'''''''''0123456789>NUL
FOR %%n in (0 1 2 3 4 5 6 7 8 9) do IF errorlevel 1%%n SET N=%%n
CHOICE/n/c'0123456789 %N%
FOR %%n in (0 1 2 3 4 5 6 7 8 9) do IF errorlevel }%%n SET N=%N%%%n
SET NESTED=|ECHO %N%'|CHOICE/c'0123456789>NUL
FOR %%n in (0 1 2 3 4 5 6 7 8 9) do IF errorlevel }%%n SET B=%%n
:Repeat
ECHO..|CHOICE/c'''%NESTED%.>NUL
FOR %%n in (0 1 2 3 4 5 6 7 8 9) do IF errorlevel Y%B%%%n SET L=%B%%%n
ECHO. %L% NESTED = %NESTED%
SET NESTED=%NESTED%#
IF NOT (%L%)==(%N%) GOTO Repeat
ECHO. Ruler: 0 1 2 3 4 5
ECHO. 01234567890123456789012345678901234567890123456789012
FOR %%n in (N B L NESTED) do SET %%n=
ErLevHEX.bat
This batch file returns the Errorlevel parameter as a two digit HEX number
@ECHO OFF
SET B=F
FOR %%! IN (0 A B C D E F G H I J K L M N O) DO IF ERRORLEVEL %%!0000 SET
A=%%!
FOR %%! in (E D C B A @) DO IF NOT ERRORLEVEL %A%00I%%! SET B=%%!
IF @==%B% FOR %%! in (0 1 2 3 4 5 6 7 8 9) DO IF ERRORLEVEL %A%000%%! SET
B=%%!
ECHO %A%'|CHOICE/c'0ABCDEFGHI'''''''JKLMNO>NUL
FOR %%! in (1 2 3 4 5 6 7 8 9 A B C D E F) DO IF ERRORLEVEL }%%! SET A=%%!
ECHO. Errorlevel %A%%B%h
FOR %%! in (A B) do SET %%!=
B-Levels.bat
Examples:
Input 1 (or 257...) and the ERRORLEVEL would be set to one.
The Exit code (ERRORLEVEL) set is displayed both dec & hex.
To get the ASCII value of a normal character (a character that usual
works in DOS/Batch files), just prefix the input with a lowercase H.
This batch file is 70 lines & 2319 bytes. Please unwrap line num 62.
@ECHO OFF
IF NOT %1!== ! FOR %%c in (SET GOTO) do %%c Y=%1
ECHO: Input,
FC/n/Lb1 NUL CON|FIND "1">%temp%.\~.bat
ECHO::EXIT|%COMSPEC%/kPROMPT e102'SET Y='$_w$_q|DEBUG %temp%.\~.bat>NUL
CALL %temp%.\~.bat
:Y [jumped, (external value)].
SET N=40
SET D=0
IF ERRORLEVEL % (odd, not even.)%%Y%p000128 SET D=1
SET H=3
SET X=F
GOTO N
:0000
IF 0==%X% FOR %%! in (GOTO:N SET) do %%! X=2
IF 2==%X% FOR %%! in (GOTO:N SET) do %%! X=4
IF 4==%X% FOR %%! in (GOTO:N SET) do %%! X=6
IF 6==%X% FOR %%! in (GOTO:N SET) do %%! X=8
IF 8==%X% FOR %%! in (GOTO:N SET) do %%! X=A
IF C==%X% FOR %%! in (GOTO:N SET) do %%! X=E
SET X=C
GOTO N
:0001
IF 1==%X% FOR %%! in (SET GOTO:N) do %%! X=3
IF 3==%X% FOR %%! in (SET GOTO:N) do %%! X=5
IF 5==%X% FOR %%! in (SET GOTO:N) do %%! X=7
IF 7==%X% FOR %%! in (SET GOTO:N) do %%! X=9
IF 9==%X% FOR %%! in (SET GOTO:N) do %%! X=B
IF D==%X% SET X=F
IF B==%X% SET X=D
:N
ECHO a> %temp%.\~.bat
ECHO mov ax,4c%H%%X%>>%temp%.\~.bat
ECHO int 21>> %temp%.\~.bat
ECHO.>> %temp%.\~.bat
ECHO g>> %temp%.\~.bat
DEBUG >NUL< %temp%.\~.bat
IF NOT ERRORLEVEL %Y% GOTO:000%N% SET Y=00000000
IF !==!%D% GOTO End
IF 10==%N% GOTO Add
SET N=10
FOR %%! in (0 4 8) do IF ERRORLEVEL %(3F 7F BF)%%%!0063 SET H=%%!
GOTO N
:00010
FOR %%! in (1 2 3,5 6 7,9) do IF ERRORLEVEL %()%%%!0255 SET H=%%!
FOR %%! in ( A B,D E F, ) do IF ERRORLEVEL %()%%%!0143 SET H=%%!
FOR %%! in ( 3 7 B F ) do IF %H% == %%! GOTO Add
GOTO N
:00040
@ SET H=7
IF ERRORLEVEL %(7F...)%127 SET H=B
IF NOT ERRORLEVEL %(...7F)%128 GOTO N
SET N=10
SET H=C
GOTO N
:Add
SET N=%D%
SET D=
SET X=%N%
GOTO N
:End
FOR %%! in (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
) do IF ERRORLEVEL %%!0 SET D=%%!
FOR %%! in (0 1 2 3 4 5 6 7 8 9) do IF ERRORLEVEL %D%%%! SET D=%D%%%!
IF ERRORLEVEL * FOR %%! in (0 1 2 3 4 5) do IF ERRORLEVEL I%%! SET D=25%%!
ECHO.
ECHO.
ECHO. IF ERRORLEVEL %Y% equivalent: IF ERRORLEVEL %D% (%H%%X% Hex)
FOR %%! in (Y N D H X) do SET %%!=
DEL %temp%.\~.bat
IF %1!== ! FOR %%! in (ECHO ECHO PAUSE CLS) do %%!.
:------------------------
: Links: [Usenet].
: Notes:
: You can substitute the SET Y=00000000 with ECHO: OOPS!: (no value in Y).
: You can use the: %()% in line number 45 or/and 46 to write your comments
: about the Errorlevel is tested: (0F 1F 2F,4F 5F 6F,8F)/(9F AF,CF DF EF).
: I have add the above comments because: I'm not completly convinced about
: that everyone can see that 9Fh is equivalent (170000 +143) -256n = 159d.
: Hint: Input: 170143 or A0143 (ASCII value of A is 65 and 65 -48 is 17d).
: More notes about how it works shouldn't be necessary, just run the batch
: in your head. I have done a lot about writing it simple as possible, so,
: the file should be worth a closer look: (a tool written to programmers),
: but if you just use it to convert RGB code to hex numbers would be okay.
:-)
Extra:
Modifications:
Adding five lines after line number 31: (Label N):
:N
if not d''%n% ==%t% call echo.
set t= d''%n%
echo...>%temp%.\~.bat
echo exit|%comspec% /k prompt e100' %h%%x%'%t%$_w$_q|debug %temp%.\~.bat>nul
type %temp%.\~.bat
Notice that you can modify the first two lines of the above:
i.e.: substitute the (d) in (d''%n%) with either (a), or (0)
like this:
if not a''%n% ==%t% call echo.
set t= a''%n%
OR:
if not 0''%n% ==%t% call echo.
set t= 0''%n%
About the third line: "ECHO...>%temp%.\~.bat":
The number of dots in "ECHO..." matching the length of data i.e. number of
characters in ' %h%%x%' = 3, (REM. that the RCX register would be 4 byte),
so, the variable named N is only used to determine when ECHO. (in the CALL
ECHO.) should be done.
A compact and alternative one lines, could be written something like this:
:N (d)
echo exit|%comspec%/kprompt e0' %h%%x%'d$_rcx$_4$_w0$_q|debug con>nul
Benny Pedersen,
PS.: You can put the following two lines after line number 1: (@ECHO OFF):
echo exit|%comspec% /k prompt fb800:00 Lfa0 20 2f$_q|debug>nul
echo exit|%comspec% /k prompt fb800:a0 L0a0 20 f8$_q|debug>nul
or use a compact version:
@ECHO OFF
echo exit|%comspec%/kprompt fb800:0Lfa0' /'$_fb800:a0La0' 'f8$_q|debug>nul
TIPS: If you do an exploration of the suggested modifications, then use an
input of a high number such as 255, so, you'll get a better overview
of any differences.
BTW.: Please don't use this one :-)
@ECHO OFF
echo exit|%comspec%/kprompt fb800:0Lfa0 2 cf$_q|debug>nul
choice/c$/t$,2>nul
cls
Hex2dec
@ MODE Co40
@ ECHO EXIT|%COMSPEC%/kPROMPT fB800:0L7D0' /'$_fB800:50L50'_'78$_q|debug>NUL
::Before executing this batch program, please unwrap 3 lines (num 4, 6 & 8:)
@% 1% ECHO OFF
% 2% ECHO: Input Hex (two digits:)
% 3% CHOICE/n/c~0123456789~~~~~~~ABCDEF>NUL
% 4%FOR %%! in (0 1 2 3 4 5 6 7 8 9 A B C D E F) do IF errorlevel 77%%! SET
X=%%!
% 5% CHOICE/n/c~0123456789~~~~~~~ABCDEF %X%
% 6%FOR %%! in (0 1 2 3 4 5 6 7 8 9 A B C D E F) do IF errorlevel 77%%! SET
X=%X%%%!
% 7%ECHO EXIT|%COMSPEC%/kPROMPT a$_mov ax,4c%X%$_int 21$_$_g$_|debug|SET X=
% 8%FOR %%! in (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
24) do IF ERRORLEVEL %%!0 SET X=%%!
% 9% FOR %%! in (0 1 2 3 4 5 6 7 8 9) do IF ERRORLEVEL %X%%%! SET X=%X%%%!
% 10% FOR %%! in (0 1 2 3 4 5) do IF ERRORLEVEL 25%%! SET X=25%%!
% 11% ECHO: %X% Dec
:: A new version by Benny Pedersen, Marts 15, 2005 ::
:: Since I wrote my New Website, this old DOS page ::
:: is not updated * except * this is an exception. ::
Colors
::@ MULTI.BAT: (64 lines including this).
::@ All tables in one file. Preview of a GIF file is available at:
::@ http://users.cybercity.dk/~bse26236/batutil/help/how/multi.gif
::@ Converting HEX to DEC, DEC to HEX. Get the ASCII values
::@ in both HEX and DEC or get the code to make all colors.
::@ This batch file maybe handy for tuning the monitor RGB,
::@ the colour temperature and the contrast for Batch work.
::@ Benny Pedersen,
::@ PS. Try substituting all '?' with '[' and 'o' with 'k'.
@echo off
@if exist %0.bat %0.bat
find<%0 "@"/v|debug>nul
@goto eof
fB800:21EL44' p0p1p2p3p4p5p6p7p8p9pApBpCpDpEpFp'
eB800:2B8' '7'1'7 2 0A'0p'F 00 F 01 F 02 F 03 F 04 F 05 F 06 F 07 F 08 F 09
eB800:2D4 2 0A F 0B F 0C F 0D F 0E F 0F'0p'00'?'01'o'02'?'03'o'04'?'05'o'
eB800:2EE 06'?'07'o'08'?'09'o'0A'?'0B'o'0C'?'0D'o'0E'?'0F'o'
eB800:358' '7'2'7 2 14'1p'F 10 F 11 F 12 F 13 2 14 F 15 F 16 F 17 F 18 F 19
eB800:374 F 1A F 1B F 1C F 1D 2 1E F 1F'1p'10'o'11'?'12'o'13'?'14'o'15'?'
eB800:38E 16'o'17'?'18'o'19'?'1A'o'1B'?'1C'o'1D'?'1E'o'1F'?'
eB800:3F8' '7'4'7 2 28'2p'F 20 F 21 F 22 F 23 F 24 F 25 F 26 F 27 2 28 F 29
eB800:414 F 2A F 2B F 2C F 2D F 2E F 2F'2p'20'?'21'o'22'?'23'o'24'?'25'o'
eB800:42E 26'?'27'o'28'?'29'o'2A'?'2B'o'2C'?'2D'o'2E'?'2F'o'
eB800:498' '7'5'7 2 32'3p'F 30 F 31 2 32 F 33 F 34 F 35 F 36 F 37 F 38 F 39
eB800:4B4 F 3A F 3B 2 3C F 3D F 3E F 3F'3p'30'o'31'?'32'o'33'?'34'o'35'?'
eB800:4CE 36'o'37'?'38'o'39'?'3A'o'3B'?'3C'o'3D'?'3E'o'3F'?'
eB800:538' '7'7'7 2 46'4p'F 40 F 41 F 42 F 43 F 44 F 45 2 46 F 47 F 48 F 49
eB800:554 F 4A F 4B F 4C F 4D F 4E F 4F'4p'40'?'41'o'42'?'43'o'44'?'45'o'
eB800:56E 46'?'47'o'48'?'49'o'4A'?'4B'o'4C'?'4D'o'4E'?'4F'o'
eB800:5D8' '7'8'7 2 50'5p'2 50 F 51 F 52 F 53 F 54 F 55 F 56 F 57 F 58 F 59
eB800:5F4 2 5A F 5B F 5C F 5D F 5E F 5F'5p'50'o'51'?'52'o'53'?'54'o'55'?'
eB800:60E 56'o'57'?'58'o'59'?'5A'o'5B'?'5C'o'5D'?'5E'o'5F'?'
eB800:678'1'7'0'7 2 64'6p'F 60 F 61 F 62 F 63 2 64 F 65 F 66 F 67 F 68 F 69
eB800:694 F 6A F 6B F 6C F 6D 2 6E F 6F'6p'60'?'61'o'62'?'63'o'64'?'65'o'
eB800:6AE 66'?'67'o'68'?'69'o'6A'?'6B'o'6C'?'6D'o'6E'?'6F'o'
eB800:718'1'7'2'7 2 78'7p'F 70 F 71 F 72 F 73 F 74 F 75 F 76 F 77 2 78 F 79
eB800:734 F 7A F 7B F 7C F 7D F 7E F 7F'7p'70'o'71'?'72'o'73'?'74'o'75'?'
eB800:74E 76'o'77'?'78'o'79'?'7A'o'7B'?'7C'o'7D'?'7E'o'7F'?'
eB800:7B8'1'7'3'7 2 82'8p'F 80 F 81 2 82 F 83 F 84 F 85 F 86 F 87 F 88 F 89
eB800:7D4 F 8A F 8B 2 8C F 8D F 8E F 8F'8p'80'?'81'o'82'?'83'o'84'?'85'o'
eB800:7EE 86'?'87'o'88'?'89'o'8A'?'8B'o'8C'?'8D'o'8E'?'8F'o'
eB800:858'1'7'5'7 2 96'9p'F 90 F 91 F 92 F 93 F 94 F 95 2 96 F 97 F 98 F 99
eB800:874 F 9A F 9B F 9C F 9D F 9E F 9F'9p'90'o'91'?'92'o'93'?'94'o'95'?'
eB800:88E 96'o'97'?'98'o'99'?'9A'o'9B'?'9C'o'9D'?'9E'o'9F'?'
eB800:8F8'1'7'6'7 2 A0'Ap'2 A0 F A1 F A2 F A3 F A4 F A5 F A6 F A7 F A8 F A9
eB800:914 2 AA F AB F AC F AD F AE F AF'Ap'A0'?'A1'o'A2'?'A3'o'A4'?'A5'o'
eB800:92E A6'?'A7'o'A8'?'A9'o'AA'?'AB'o'AC'?'AD'o'AE'?'AF'o'
eB800:998'1'7'8'7 2 B4'Bp'F B0 F B1 F B2 F B3 2 B4 F B5 F B6 F B7 F B8 F B9
eB800:9B4 F BA F BB F BC F BD 2 BE F BF'Bp'B0'o'B1'?'B2'o'B3'?'B4'o'B5'?'
eB800:9CE B6'o'B7'?'B8'o'B9'?'BA'o'BB'?'BC'o'BD'?'BE'o'BF'?'
eB800:A38'2'7'0'7 2 C8'Cp'F C0 F C1 F C2 F C3 F C4 F C5 F C6 F C7 2 C8 F C9
eB800:A54 F CA F CB F CC F CD F CE F CF'Cp'C0'?'C1'o'C2'?'C3'o'C4'?'C5'o'
eB800:A6E C6'?'C7'o'C8'?'C9'o'CA'?'CB'o'CC'?'CD'o'CE'?'CF'o'
eB800:AD8'2'7'1'7 2 D2'Dp'F D0 F D1 2 D2 F D3 F D4 F D5 F D6 F D7 F D8 F D9
eB800:AF4 F DA F DB 2 DC F DD F DE F DF'Dp'D0'o'D1'?'D2'o'D3'?'D4'o'D5'?'
eB800:B0E D6'o'D7'?'D8'o'D9'?'DA'o'DB'?'DC'o'DD'?'DE'o'DF'?'
eB800:B78'2'7'3'7 2 E6'Ep'F E0 F E1 F E2 F E3 F E4 F E5 2 E6 F E7 F E8 F E9
eB800:B94 F EA F EB F EC F ED F EE F EF'Ep'E0'?'E1'o'E2'?'E3'o'E4'?'E5'o'
eB800:BAE E6'?'E7'o'E8'?'E9'o'EA'?'EB'o'EC'?'ED'o'EE'?'EF'o'
eB800:C18'2'7'4'7 2 F0'Fp'2 F0 F F1 F F2 F F3 F F4 F F5 F F6 F F7 F F8 F F9
eB800:C34 2 FA F FB F FC F FD F FE F FF'Fp'F0'o'F1'?'F2'o'F3'?'F4'o'F5'?'
eB800:C4E F6'o'F7'?'F8'o'F9'?'FA'o'FB'?'FC'o'FD'?'FE'o'FF'?'
q
:eof
|